package com.example.jdkdemo.lesson1;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;

public class Lesson1_1 {

    /**
     * 编写Java程序时，应该注意
     * 1。大小写敏感：Java是大小写敏感的，这就意味着标识符Hello与hello、name与Name是不同的。
     * 2。类名：对于所有的类来说，类名的首字母应该大写。如果类名由若干单词组成，那么每个单词的首字母应该大写，即驼峰写法。如MyFirstJavaClass
     * 3。方法名：所有的方法名应该以小写字母开头，如果方法名含有若干单词，则后面的每个单词首字母大写。
     * 4。源文件名：源文件名必须和类名相同。当保存文件的时候，你应该使用类名作为文件名保存。文件的后缀为.java（如果文件名和类名不相同则会导致便衣错误）
     * 5。主方法入口：所有的Java程序由public static void main(String[] args)方法开始执行。
     */

    public static void printName(){
        String name = "Jody";
        System.out.println(name);
    }

    /**
     * Java标识符
     * Java所有的组成部分都需要名字，类名、变量名以及方法名都被称为标识符。
     * 关于Java标识符，有以下几点要注意：
     * 所有的标识符都应该以字母（A-Z或a-z），美元符（$)、或者下划线(_)开始
     * 首字母之后可以是任何字符的组合
     * 关键字不能用作标识符
     * 标识符是大小写敏感的
     * 合法标识符举例：age、$salary、_value、__1_value
     * 非法标识符举例: 123abc、-salary
     */

    /**
     * Java修饰符
     * 像其他语言一样，Java可以使用修饰符来修饰类中方法和属性。主要有两类修饰符：
     * 1。可访问修饰符：default，public，protected，private
     * 2。不可访问修饰符：final，abstract，strictfp
     */

    final private void sayHello(){
        String hello = "hello";
        System.out.println(hello);
    }

    strictfp private void sayYes(){
        String yes = "yes";
        System.out.println(yes);
    }

    protected void sayHi(){
        String hi = "hi";
        System.out.println(hi);
    }

    /**
     * Java中的主要有如下几种类型的变量
     * 1。局部变量
     * 2。类变量（静态变量）
     * 3。成员变量（非静态变量）
     */

    public static String name = "Jody";

    private void getName(){
        System.out.println(name);

        String name = "Jody -- Jody";
        System.out.println(name);
    }

    /**
     * Java数组
     * 数组是存储在堆上的对象，可以保存多个同类型的变量。
     */
    public void arr(){
       int[] arr = new int[3];
       arr[0]=1;
       Arrays.stream(arr).forEach(System.out::println);
       String[] strArr = new String[3];
       strArr[0]="Jody";
       Arrays.stream(strArr).forEach(System.out::println);
    }

    /**
     * Java枚举
     * Java5.0引入枚举，枚举限制变量只能是预先设定好的值。使用枚举可以减少代码中的bug。
     * 例如，我们为果汁店设计一个程序，它将限制果汁为小杯、中杯、大杯。这就意味着它不允许顾客点除了这三种尺寸之外的果汁。
     * 注意：枚举可以单独声明或者声明在类里面。方法、变量、构造函数也可以在枚举中定义。
     */

    @Getter
    @AllArgsConstructor
    public enum Type {
        BOY(1,"a boy type"),
        GIRL(0,"a girl type");

        private int code;
        private String desc;
    }

    public static void judgeType(Type type){
        System.out.println(type.code);
    }


}
